﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BIZModel;

namespace BIZMA._controls.Messages
{
    public partial class Edit_Message : System.Web.UI.UserControl, IModalDialog
    {

        public UC_ModalContainer ContainerControl { get; set; }
        private bool InitLoaded { get { return ViewState["InitLoaded"] != null ? (bool)ViewState["InitLoaded"] : false; } set { ViewState["InitLoaded"] = value; } }

        //IDProperty till datat som hanteras i dialogen typ ProjectId,EmployeeId....
        //Styrs av publika metoder
        private Guid ReplyMessageId { get { return ViewState["ReplyMessageId"] != null ? (Guid)ViewState["ReplyMessageId"] : Guid.Empty; } set { ViewState["ReplyMessageId"] = value; } }

        public Guid ImageTagId { get { return ViewState["ImageTagId"] != null ? (Guid)ViewState["ImageTagId"] : Guid.Empty; } set { ViewState["ImageTagId"] = value; } }

        //Properties för att hålla reda på om en dialog kan öppnas eller om den redan är öppen i en underliggande dialog
        //Sätt OnInit(EventArgs e)
        //public bool CANOPENSOMEDIALOG { get { return ViewState["CANOPENSOMEDIALOG"] != null ? (bool)ViewState["CANOPENSOMEDIALOG"] : true; } set { ViewState["CANOPENSOMEDIALOG"] = value; } }

        #region This Dialog
        protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack || !InitLoaded)
                {
                    InitLoaded = true;

                    //Gör sådant som man gör på pageload här typ fyll "statisk" dropdown med värden mm 
                }
            }

            protected override void OnInit(EventArgs e)
            {
                base.OnInit(e);

                //här gör man alla init inställningar typ lägga till eventhandlers och annat som styr sidan

                if (ContainerControl != null)
                {
                    //Sätt höjden här istället så behöver man inte göra det på alla ställen som poppar detta formulär
                    ContainerControl.Width = 800;
                    ContainerControl.Height = 600;
                    ContainerControl.Title = "Meddelande";

                    ContainerControl.ShowButtons(true, true, false);
                    ContainerControl.DOClick += new UC_ModalContainer.ModalCommand(Modal_DOClick);
                    ContainerControl.OKClick += new UC_ModalContainer.ModalCommand(Modal_OKClick);
                    ContainerControl.CancelClick += new UC_ModalContainer.ModalCommand(Modal_CancelClick);
                }

                //Kontrollera om ytterligare dialoger kan öppnas eller om de redan är öppnade i underliggade dialoger
                //CANOPENSOMEDIALOG = pop_EXEMPEL.CanAddPopupControl(ModalControls.MessageList);
                //BaseBL.BtnOpenEnabled(btnEXEMPEL, CANOPENSOMEDIALOG, ViewState);

                //Regga alla event här istället för i sidan eftersom det funkar så dåligt med automatisering av eventstödet i VS
                //btnEXEMPEL.Command += new CommandEventHandler(btnEXEMPEL_Command);



            }

           

            void Modal_CancelClick(object sender, EventArgs e)
            {
                
            }

            void Modal_OKClick(object sender, EventArgs e)
            {
                Save();
            }

            void Modal_DOClick(object sender, EventArgs e)
            {
                Save();
            }

        #endregion

            #region methods this dialog
            /// <summary>
            /// Den här funktionen aktiverar inativerar knappar som kräver att formuläret har sparats/laddats och det finns data som 
            /// knappen kan använda ex Man kan inte öppna en planering för ett projekt om inte projektet har skapats/laddats först
            /// </summary>
            private void ToggleButtons()
            {
                //if (CURRENTVAL > 0)
                //{
                //    //man måste förs checka så att inte knappen är avaktiverad pga att dialogen redan finns i underliggande dialog
                //    if (CANOPENSOMEDIALOG)
                //    {
                //        //BaseBL.BtnNeedsDataEnabled(btnEXEMPEL, true, ViewState);
                //    }
                //}
                //else
                //{
                //    if (CANOPENSOMEDIALOG)
                //    {
                //        //BaseBL.BtnNeedsDataEnabled(btnEXEMPEL, false, ViewState);
                //    }
                //}
            }
        
            /// <summary>
            /// Metod för att tömma sida och aktivera läge för att skapa nytt
            /// </summary>
            public void NewMessage()
            {
                ReplyMessageId = Guid.Empty;
                txtMessage.Text = "";
                litReplyTo.Text = "";
                litReplyToText.Text = "";
                divReply.Visible = false;
            }

            /// <summary>
            /// ladda formuläret med existerande data för att ex uppdatera
            /// </summary>
            /// <param name="someVal"></param>
            public void ReplyMessage(Guid replyMessageId)
            {
                InitLoaded = true;

                ReplyMessageId = replyMessageId;

                BIZMAEntities ent = BaseBL.GetEnt();

                Message message = ent.Messages.FirstOrDefault(q => q.MessageId == replyMessageId);

                txtMessage.Text = "";
                litReplyTo.Text = string.Format("{0} {1}", message.UserProfile.FirstName, message.UserProfile.LastName);
                litReplyToText.Text = message.MessageText;
                divReply.Visible = true;

            }


            private void Save()
            {
                BIZMAEntities ent = BaseBL.GetEnt();

                Message message = null;
                if (ReplyMessageId == Guid.Empty)
                {
                    Guid messageId = Guid.NewGuid();
                    message = Message.CreateMessage(messageId, 0, messageId, BaseBL.UserKey, txtMessage.Text, DateTime.Now);

                    ent.AddToMessages(message);

                    if(ImageTagId != Guid.Empty)
                    {
                        ImageTag IT = ent.ImageTags.FirstOrDefault(q => q.ImageTagId == ImageTagId);

                        IT.Messages.Add(message);
                    }
                }
                else
                {

                    Message replyTo = ent.Messages.FirstOrDefault(q => q.MessageId == ReplyMessageId);

                    message = Message.CreateMessage(Guid.NewGuid(), 0, replyTo.DiscussionId, BaseBL.UserKey, txtMessage.Text, DateTime.Now);
                    message.ReplyToId = replyTo.MessageId;

                    ent.AddToMessages(message);
                }

                ent.SaveChanges();
            }
            #endregion


            #region EXEMPEL DIALOG
            void btnEXEMPEL_Command(object sender, CommandEventArgs e)
            {
                //pop_EXEMPEL.AddControl(ModalControls.PlanningList);
                //if (pop_EXEMPEL.PopUpControlExists)
                //{
                //    _Project.UC_PlanningList uc = ((_Project.UC_PlanningList)pop_EXEMPEL.PopUpControl);
                //    uc.LoadTaskPlanning(CURRENTVAL);
                //    pop_EXEMPEL.ModalOpen();
                //}
            }
            #endregion


    }
}